/*
 * 文 件 名:  SystemInit.java
 * 版    权:  Huawei Technologies Co., Ltd. Copyright YYYY-YYYY,  All rights reserved
 * 描    述:  系统数据初始化
 * 修 改 人:  025415
 * 修改时间:  2011-12-5
 * 跟踪单号:  <跟踪单号>
 * 修改单号:  <修改单号>
 * 修改内容:  <修改内容>
 */
package com.huawei.virest.common;

import java.io.File;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.commons.configuration.PropertiesConfiguration;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.huawei.virest.common.domain.Configuration;

/**
 * 系统数据初始化
 * 
 * @author  025415
 * @version  [版本号, 2011-12-5]
 * @see  [相关类/方法]
 * @since  [产品/模块版本]
 */
public class SystemInit implements ServletContextListener
{
    /**
     * 日志实例
     */
    private static Log logger = LogFactory.getLog(SystemInit.class);
    
    /**
     * Servlet上下文
     */
    private ServletContext context;
    
    private static Configuration config;
    
    /**
     * 初始化方法
     */
    public void init()
    {
        logger.debug("Init System ...... ");
        
        try
        {
            // config.properties路径
            String configPath = context.getRealPath("/") + "WEB-INF"
                    + File.separator + "classes" + File.separator
                    + "config.properties";
            
            PropertiesConfiguration properties = new PropertiesConfiguration(
                    configPath);
            
            config = new Configuration(properties);
            
            // 初始化系统路径
            config.setContextPath(context.getContextPath());
            
            // 初始化绝对路径
            config.setAbsolutePath(context.getRealPath("/"));
        }
        catch (Exception ex)
        {
            logger.error("System init fail catch Exception!", ex);
            throw new RuntimeException("System init fail,Exception "
                    + ex.getClass(), ex);
        }
        
        logger.debug("Init System end ...... ");
    }
    
    /**
     * 销毁上下文
     * @param servletcontextevent
     */
    public void contextDestroyed(ServletContextEvent servletcontextevent)
    {
        
    }
    
    /**
     * 初始化上下文
     * @param servletcontextevent
     */
    public void contextInitialized(ServletContextEvent servletcontextevent)
    {
        context = servletcontextevent.getServletContext();
        
        init();
    }
    
    /**
     * 读取配置
     * @return 配置
     */
    public static Configuration getConfig()
    {
        return config;
    }
    
    /**
     * 重新加载配置文件
     */
    public void reload()
    {
    	init();
    }
}
